package ca.etsmtl.log120.tp3.rangs;

import ca.etsmtl.log120.tp3.cartes.Denomination;
import ca.etsmtl.log120.tp3.mains.Main;

/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #3
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY16079108
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : ListeAnalyseurs.java
Date cree : 2011-07-06
Date dern. modif. 2011-07-06
*************************************************** ****
Historique des modifications
*************************************************** ****

***************************************************/

public class DeuxPaires extends AbstractCartesPareilles{

	private static final int NOMBRE_CARTES_IDENTIQUES = 3;
	
	/**
	 * Constructeur par defaut
	 */
	public DeuxPaires(){}
	
	/**
	 * Constructeur par copie d'objet	
	 * @param deuxPaires L'objet DeuxPaires pour lequel on veut retourner une copie
	 */
	public DeuxPaires(DeuxPaires deuxPaires) {
		
		this.denom = deuxPaires.denom;
		this.resteMain = deuxPaires.resteMain.clone();
	}

	/**
	 * On override la methode reconnaitre main de AbstractCartesPareilles pour verifier si la main a deux paires
	 */
	@Override
	public boolean reconnaitreMain(Main main) {
	
		denom = UtilMain.isIdentique(main, 2);
		Main mainMod = UtilMain.removeDenom(main, denom);
		
		resteMain[0] = UtilMain.isIdentique(mainMod, 2);
		
		try{
			//Pour etre sur que le denom a
			if(Integer.parseInt(resteMain[0].getCaractereSurCarte()) > Integer.parseInt(denom.getCaractereSurCarte())){
				switchDenoms();
			}
		}catch(NullPointerException e){}
		
		if(resteMain[0] != null)
			return true;
		else
			return false;
	}

	@Override
	public Denomination getTopDenomination() {
		
		if(Integer.parseInt(denom.getCaractereSurCarte()) > Integer.parseInt(resteMain[0].getCaractereSurCarte()))
			return denom;
		else if(Integer.parseInt(resteMain[0].getCaractereSurCarte()) > Integer.parseInt(denom.getCaractereSurCarte())){
			switchDenoms();
			return denom;
		}
		else
			return null;
	}
	
	public void switchDenoms(){
		
		Denomination tmp;
		tmp = resteMain[0];
		resteMain[0] = denom;
		denom = tmp;
	}

	/**
	 * Methode inutile pour le rang DeuxPaires
	 */
	@Override
	protected int getNombreCartesIdentique() {

		return NOMBRE_CARTES_IDENTIQUES;
	}

	/**
	 * On retourne un nouvel objet de type DeuxPaires
	 */
	@Override
	public AbstractRangAnalysable clone() {

		return new DeuxPaires(this);
	}

	/**
	 * La carte a comparer apres les deux paires est la plus haute carte restant dans la main
	 */
	@Override
	public void determineResteMain(Main main) {
		
		Main mainMod = UtilMain.removeDenom(main, denom);
		mainMod = UtilMain.removeDenom(mainMod, resteMain[0]);
		resteMain[1] = UtilMain.getHighestCard(mainMod);
	}
}
